package com.yhg.backend.config;

import jakarta.servlet.http.HttpSession;
import jakarta.websocket.HandshakeResponse;
import jakarta.websocket.server.HandshakeRequest;
import jakarta.websocket.server.ServerEndpointConfig;

/**
 * 获取HttpSession，这样的话，ChatEndpoint类就能操作HttpSession
 */
public class GetHttpSessionConfig extends ServerEndpointConfig.Configurator {

    @Override
    public void modifyHandshake(ServerEndpointConfig serverEndpointConfig, HandshakeRequest request, HandshakeResponse response) {
        try {
            // 获取 HttpSession 对象
            HttpSession httpSession = (HttpSession) request.getHttpSession();
            
            if (httpSession == null) {
                System.err.println("错误: WebSocket握手请求中的HttpSession为null");
                // 即使HttpSession为null，也不要抛出异常，允许连接继续
                // 在ChatEndpoint中会处理null的情况
            } else {
                String currentUser = (String) httpSession.getAttribute("currentUser");
                System.out.println("WebSocket握手请求，用户: " + currentUser);
                // 将 httpSession 对象保存起来，存到 ServerEndpointConfig 对象中
                // 在 ChatEndpoint 类的 onOpen 方法就能通过 EndpointConfig 对象获取在这里存入的数据
                serverEndpointConfig.getUserProperties().put(HttpSession.class.getName(), httpSession);
            }
        } catch (Exception e) {
            System.err.println("WebSocket握手修改过程中发生异常: " + e.getMessage());
            e.printStackTrace();
            // 即使发生异常，也允许连接继续，不要中断握手过程
        }
    }

}
